home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr10 / v12n12.zip / PCMCVT.ZIP / PCMASM.ZIP / W4WCONV.INC < prev    next >
Text File  |  1993-05-22  |  5KB  |  179 lines

  1. ;W4WCONV.INC
  2. ;Copyright (c) 1993 Jay Munro
  3. ;First Published in PC Magazine June 29 1993
  4. ;Conversion module for WinWord 1.x & 2.0
  5. ;
  6. ;Each module is responsible for reading and writing text via the system
  7. ;buffers.  Command line flags are global and available.
  8.  
  9. Word4WINCVT Proc Near
  10.     Lea    SI, HeaderBuffer             ;get address of header to check
  11.     Invoke Seek, SHandle, [SI].MSW4wfcMin ;seek to start of file
  12.     Jnc    @F
  13.     Jmp    W4WExit                      ;error, bag out
  14.  
  15. @@:
  16.     Mov    Word Ptr AX, [SI+1Ch]        ;get low word of end of text
  17.     Mov    MSW4WFileEnd,AX
  18.     Mov    Word Ptr AX,[SI+1Eh]         ;and high byte
  19.     Mov    MSW4WFileEnd[2],AX
  20.     Mov    AX, [SI].MSW4wfcMin          ;get the offset of beginning of file
  21.     Mov    DX, [SI].MSW4wfcMin[2]       ;  DWord
  22.     Sub    Word Ptr MSW4WFileEnd,AX     ;subtract starting point to get
  23.     Sbb    Word Ptr MSW4WFileEnd[2],DX  ;   actual text of the file
  24.  
  25. ReadW4WFile:
  26.     Call   W4WReadIt                    ;go read the file
  27.  
  28. RW4WLoop:                               ;weed out control chars
  29.     LodSb                               ;load a character
  30.     Sub    Word Ptr MSW4WFileEnd, 1
  31.     Sbb    Word Ptr MSW4WFileEnd[2], 0
  32.     Cmp    Word Ptr MSW4WFileEnd, 0
  33.     Jnz    @F
  34.     Cmp    Word Ptr MSW4WFileEnd[2], 0
  35.     Jnz    @F
  36.     Call   FlushIt
  37.     Jmp    W4WExit                      ;exit stage left
  38.  
  39. MSW4WFileEnd  DW 0,0                    ;text length tracker
  40. FieldCounter  DB 0,0                    ;counter for nested fields
  41.  
  42. @@:
  43.     Cmp    AL,13                        ;a carriage return?
  44.     Jnz    @F     
  45.     Jmp    WriteWhatsLeft
  46.  
  47. @@:
  48.     Cmp    AL,10                        ;hard cr for W4W
  49.     Jnz    @F
  50.     Jmp    WriteWhatsLeft
  51.  
  52. @@:
  53.     Cmp    AL,11
  54.     Jnz    @F
  55.     Mov    AL,13
  56.     Call   WriteIt                      ;write what's in AL
  57.     Mov    AL,10                        ;make it a hard return
  58.     Jmp    WriteWhatsLeft
  59.  
  60. @@:
  61.     Cmp    AL,'Æ'
  62.     Jnz    @F
  63.     Mov    AL,39                        ;apostrophe
  64.     Jmp    WriteWhatsLeft
  65.  
  66. @@:
  67.     Cmp    AL,15                        ;em dash?
  68.     Jnz    @F                           ;nope, keep going
  69.     Mov    AL,'ù'                       ;fake it
  70.  
  71. @@:
  72.     Cmp    AL,'ù'
  73.     Jnz    @F
  74.     Mov    AL,'-'                       ;store dual hyphans
  75.     Call   W4WWrite
  76.     Mov    AL,'-'                       ;store dual hyphans
  77.     Jmp    WriteWhatsLeft
  78.  
  79. @@:
  80.     Cmp    AL,147                       ; Quotes
  81.     Jl     @F                           ;nope
  82.     Cmp    AL,148
  83.     Jg     @F
  84.     Mov    AL,34                        ;substitute quotes 
  85.     Jmp    WriteWhatsLeft
  86.    
  87. @@:
  88.     Cmp    AL,2                         ;print current date;
  89.     Jnz    @F                           ;future expansion
  90.     Jmp    W4WReLoop
  91.  
  92. @@:
  93.     Cmp    AL,3                         ;print current time
  94.     Jnz    @F                           ;future expansion
  95.     Jmp    W4WReLoop
  96.  
  97. @@:
  98.     Cmp    AL,7                         ;columns
  99.     Jnz    @F
  100.     Jmp    W4WReLoop
  101.  
  102. @@:
  103.     Cmp    AL,9                         ;tab
  104.     Jnz    @F
  105.     Call   DoTabs                       ;expand the tabs
  106.     Jmp    W4WReLoop
  107.  
  108. @@:
  109.     Cmp    AL,19                        ;start of field
  110.     Jnz    W4WSkipRest
  111.     Mov    FieldCounter,0
  112.     
  113. CountField:
  114.     Inc    Byte Ptr Fieldcounter        ;keep a count of the number of fields
  115.     Dec    CX
  116.     Jz     FieldReRead
  117.     
  118. FieldLoop:
  119.     Sub    Word Ptr MSW4WFileEnd, 1     ;decrement file tracking variable
  120.     Sbb    Word Ptr MSW4WFileEnd[2], 0 
  121.     LodSb
  122.     Cmp    AL,21
  123.     Jz     @F                           ;end of loop
  124.     Cmp    AL,19
  125.     Jz     CountField                   ;if nested then count it
  126.     Loop   FieldLoop
  127.     Jmp    FieldReRead
  128.  
  129. @@:
  130.     Dec    Byte Ptr FieldCounter        ;keep track of nested fields
  131.     Jz     W4WSkipRest
  132.     Loop   FieldLoop
  133.  
  134. FieldReRead:
  135.     Call   W4WReadIt                    ;ran out of characters, go for more
  136.     Jc     W4WExit
  137.     Jmp    FieldLoop
  138.  
  139. RW4WLoopLily:
  140.     Jmp    RW4WLoop
  141.     
  142. W4WSkipRest:
  143.     Cmp    AL,31                        ;ok, skip the rest
  144.     Jbe    W4WReLoop                    ;skip it
  145.     Cmp    AL,196                       ;two other skippers
  146.     Jz     W4WReLoop
  147.     Cmp    AL,254                       ;columns etc...
  148.     Jae    W4WReLoop
  149.  
  150. WriteWhatsLeft:
  151.     Call   W4WWrite                     ;call our local write module
  152.     Jmp    W4WReLoop
  153.  
  154. W4WReLoop:
  155.     Loop RW4WLoopLily
  156.     Jmp  ReadW4WFile                     ;go back for more
  157.  
  158. W4WWrite:
  159.     Call   WriteIt                      ;no, then write it
  160.     Jc     BadW4WExit
  161.     RetN
  162.  
  163. W4WReadIt:
  164.     Call   ReadIt                       ;go read the file
  165.     Jnc    @F                           ;a fine read, continue
  166.     Mov    AL,-1                        ;a bad read, quit now
  167.     Call   W4WWrite                     ;flush buffer
  168.     Jmp    BadW4WExit
  169. @@:
  170.     RetN
  171.  
  172. BadW4WExit:
  173.     Pop    DX                           ;clean up stack
  174.     
  175. W4WExit:
  176.     Ret
  177.  
  178. Word4WINCVT  EndP
  179.